<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Lisp Programming with Cusp - Using Libraries</title>
        <link type="text/css" rel="stylesheet" href="wikistyle.css">
    </head>
    <body>

<h3><a href="index.html">Lis Programming with Cusp</a> - List of Included Libraries</h3>


All libraries that are included with Cusp were tested with SBCL (1.0.19 on Windows and
1.0.20 on Linux, both 32 bits).
<br/>
<br/>

<table border=1>
<tr><th>Library</th><th>Description</th><th>Notes</th></tr>

<tr>
<td>chunga 0.4.3</td>
<td>Portable chunked streams</td>
<td>drakma dependency</td>
</tr>

<tr>
<td>cl-base64 3.3.2</td>
<td>Base64 encoding and decoding with URI support</td>
<td>Tests require ptester (included) and kmrcl (not included).<br/>
<b>Testing:</b><br/>
- load cl-base64, ptester and kmrcl<br/>
- <tt>(load "path-to-libs/cl-base64-3.3.2/tests.lisp")</tt><br/>
- <tt>(in-package :cl-base64-tests)</tt><br/>
- <tt>(do-tests)</tt><br/>
- <tt>(time-routines)</tt>
</td>
</tr>

<tr>
<td>cl-fad 0.6.2</td>
<td>Portable pathname operations</td>
<td><b>Testing:</b><br/>
- load cl-fad<br/>
- <tt>(load "path-to-libs/cl-fad-0.6.2/test.lisp")</tt><br/>
- <tt>(cl-fad-test::test)</tt><br/>
</td>
</tr>

<tr>
<td>cl-interpol 0.2.1</td>
<td>String interpolation</td>
<td><b>Testing:</b><br/>
- load cl-interpol<br/>
- <tt>(asdf:oos 'asdf:test-op 'cl-interpol)</tt><br/>
On win32 tests 71-74 fail.
</td>
</tr>

<tr>
<td>cl-ppcre 2.0.0</td>
<td>Perl-compatible regular expressions</td>
<td><b>Testing:</b><br/>
- load cl-interpol<br/>
- <tt>(asdf:oos 'asdf:test-op 'cl-ppcre)</tt>
</td>
</tr>

<tr>
<td>cl-smtp</td>
<td>SMTP client functionality</td>
<td>Was not tested (need connection to smtp server)</td>
</tr>

<tr>
<td>clsql 4.0.3</td>
<td>Talk to SQL databases</td>
<td>
Tested with sqlite and mysql.<br/>
<b>Setting up for testing on Windows:</b><br/>
- run in "path-to-clsql/examples": <tt>>sqlite3.exe test</tt><br/>
- download and setup mysql (full setup) with root pass 'secret' 
and create empty database 'test':<br/>
<tt>mysql> set password for 'root'@'localhost' = password('secret');</tt><br/>
<tt>mysql> create database test;</tt><br/>
- if "path-to-clsql" is not on C: drive, create same path on C: drive, create 
"c:\path-to-clsql\db-mysql" folder and copy clsql-mysql.dll to that folder.<br/>
- Note on sqlite: sqlite3 3.6.2 is included, if you want to update replace 
sqlite3.exe in "path-to-clsql/examples" and sqlite3.dll in "path-to-clsql/uffi"
with new version.<br/>
- Note on mysql: dll's for mysql 5.0 are included. If you have other version
of mysql, do the following: make copy of libsql.dll and rename it as 
libsqlclient.dll. Copy both libsql.dll and libsqlclient.dll to "path-to-clsql/uffi".<br/>
<b>Setting up for testing on Linux:</b><br/>
- find libsqlite3.so and sqlite3.so and copy them to "path-to-clsql/uffi". 
(since I didn't have perfect match I renamed _sqlite3.so to sqlite3.so)<br/>
- run from "path-to-clsql/examples" <tt>>sqlite3 test</tt>
- install mysql and mysql development packages<br/>
- run "make" in "path-to-clsql/db-mysql"<br/>
- set root pass 'secret' and create empty database 'test':<br/>
<tt>mysql> set password for 'root'@'localhost' = password('secret');</tt><br/>
<tt>mysql> create database test; </tt><br/>
<b>Testing: </b><br/>
- copy .clsql-test.config from "path-to-clsql/examples" to home directory 
(on windows run <tt>echo %UserProfile%</tt> to find where the home directory is.<br/>
- in .clsql-test.config modify "path-to-libs" and "secret" to point to correct 
directory and mysql root password<br/>
- <tt>(asdf:oos 'asdf:test-op 'clsql) </tt>
</td>
</tr>

<tr>
<td>cl-unicode 0.1.1</td>
<td>A portable Unicode library</td>
<td>
<b>Testing:</b><br/>
- load cl-unicode<br/>
- <tt>(asdf:oos 'asdf:test-op 'cl-unicode)</tt><br/>
</td>
</tr>

<tr>
<td>cl-utilities 1.2.4</td>
<td>A library of semi-standard utilities</td>
<td><b>Testing: </b><br/>
- tests requires FiveAM, which requires ARNESI - which doesn't compile on win32</br>
- load cl-utilities<br/>
- <tt>(in-package :cl-utilities) </tt><br/>
- run test expressions from tests.lisp
</td>
</tr>

<tr>
<td>cl-who 0.11.1</td>
<td>Markup language for HTML or XML</td>
<td><b>Testing: </b><br/>
- load cl-who<br/>
- <tt>(in-package :cl-who) </tt><br/>
- run examples using <tt>(*standard-output* nil :prologue t)</tt> in place of <tt>*html-stream*</tt>
</td>
</tr>

<tr>
<td>cxml 2007-10-21</td>
<td>XML parser</td>
<td>
<b>Testing:</b><br/>
- load cxml<br/>
- <tt>(with-open-file (s &quot;/home/sk/tmp/example.xml&quot; :direction :output)
 (write-string &quot;&lt;test a='b'&gt;&lt;child/&gt;&lt;/test&gt;&quot; s))</tt><br/>
- <tt>(defparameter *example* (cxml:parse-file "c:/temp/example.xml" (cxml-dom:make-dom-builder)))</tt><br/>
- <tt>(dom:document-element *example*)</tt><br/>
- <tt>(dom:tag-name (dom:document-element *example*))</tt><br/>
- result => "test"<br/>
- <tt>(dom:child-nodes (dom:document-element *example*)) </tt><br/>
- result =&gt; <tt>#(#&lt;DOM-IMPL::ELEMENT child @  #x722b6d8a&gt;)</tt><br/>
- <tt>(dom:get-attribute (dom:document-element *example*) "a")</tt><br/>
- result => "b"
</td>
</tr>

<tr>
<td>cffi 080216</td>
<td>The Common Foreign Function Interface</td>
<td>
<b>Testing: </b><br/>
- to be able to compile lib I had to remove from test files 
(libtest.c, defcfun.lisp, callbacks.lisp): long long and other exotics<br/>
- tests are mostly OK on win32, but with my changes some tests fails<br/>
- on Linux my changes did worse
</td>
</tr>

<tr>
<td>cl+ssl 2007-07-07</td>
<td>Interface to OpenSSL</td>
<td><b>Testing:</b><br/>
- dependency of drakma<br/>
- on win32 drakma loads this library but still cannot connect through https<br/>
- on linux drakma connects through https using this library
</td>
</tr>

<tr>
<td>drakma 0.11.5</td>
<td>An HTTP client</td>
<td>
<b>Testing: </b><br/>
- load drakma<br/>
- run examples in documentation
</td>
</tr>

<tr>
<td>flexi-streams 1.0.7</td>
<td>Flexible bivalent streams</td>
<td><b>Testing: </b><br/>
- load flexi-streams
- <tt>(asdf:oos 'asdf:test-op 'flexi-streams) </tt>
</td>
</tr>

<tr>
<td>cl-store 0.8.3</td>
<td>Portable CL Package to serialize data</td>
<td><b>Testing: </b><br/>
- load cl-store<br/>
- <tt>(asdf:oos 'asdf:test-op 'cl-store) </tt><br/>
- 1 out of 127 tests fails (FUNCTION.2)
</td>
</tr>

<tr>
<td>html-template 0.9.1</td>
<td>Template library for HTML</td>
<td><b>Testing: </b><br/>
- load html-template<br/>
- <tt>(load "path-to-libs/ html-template-0.9.1/test.lisp") </tt>
</td>
</tr>

<tr>
<td>hunchentoot 0.15.7</td>
<td>Web server</td>
<td>
<b>Win32 note: </b><br/>
- compilation produces error: select 2: [ACCEPT] Continue, treating ... as having been successful.<br/> 
<b>Testing: </b><br/>
- I have not figured out how to run test file, instead I used 
<a href="http://berlinbrowndev.blogspot.com/2008/07/enterprise-common-lisp-setting-up.html">
this blog</a> to test:<br/>
- load hunchentoot<br/>
- <tt>(hunchentoot:start-server :port 4242) </tt><br/>
- go to http://localhost:4242/ in browser to see hunchentoot default page 
(to quit server I had to close its threads)
</td>
</tr>

<tr>
<td>lisp_webapp_example (ghost-trinity)</td>
<td>Testing hunchentoot (requires mysql)</td>
<td><b>Running: </b><br/>
- load hunchentoot<br/>
- load clsql-mysql<br/>
- load ghost-trinity<br/>
- <tt>(setq html-template:*default-template-pathname* #P"path-to-libs/lisp_webapp_example/")</tt><br/> 
- <tt>(hunchentoot:start-server :port 4242)</tt><br/>
- point browser to http://localhost:4242
</td>
</tr>

<tr>
<td>md5 1.8.5</td>
<td>MD5 Message Digest function</td>
<td><b>Testing: </b><br/>
- <tt>(push :md5-testing *features*) </tt><br/> 
- delete fasls in md5 folder<br/>
- load md5<br/>
- drops into debugger about constant being redefined, select continue<br/>
- <tt>(md5::test-other) </tt><br/>
- All 71 tests pass on win32, was not able to run on Linux, but did not investigate.
</td>
</tr>

<tr>
<td>meta</td>
<td>A recursive descent parser</td>
<td><b>Testing: </b><br/>
- don't know how to test
</td>
</tr>

<tr>
<td>ptester 2.1.2</td>
<td>Portable test harness package</td>
<td>It is used in testing some included libraries</td>
</tr>

<tr>
<td>puri 1.5.1</td>
<td>Parse and represent URIs</td>
<td><b>Testing: </b><br/>
- load puri<br/>
- <tt>(asdf:oos 'asdf:test-op 'puri) </tt>
</td>
</tr>

<tr>
<td>rfc2388</td>
<td>Handles the multipart/form-data media type</td>
<td>Dependency of other libraries - did not test it directly</td>
</tr>

<tr>
<td>rt 20040621</td>
<td>MIT Regression Tester</td>
<td>It is used in testing some included libraries</td>
</tr>

<tr>
<td>salsa 0.7.4</td>
<td>Compression library</td>
<td>Deprecated - use salsa2. It is a dependency of other libraries, thus included.</td>
</tr>

<tr>
<td>salza2 2.0.4</td>
<td>Compression library</td>
<td><b>Testing: </b><br/>
- load salza2<br/>
- <tt>(in-package :salza2)</tt><br/>
- <tt>(compress-data (sb-ext:string-to-octets "Hello, hello, hello, hello world.")
  'zlib-compressor)</tt><br/>
- get output, but don't know what to do with it
</td>
</tr>

<tr>
<td>split-sequence</td>
<td>Splits sequences</td>
<td><b>Testing: </b><br/>
- load split-sequence<br/>
- run examples from index.html<br/>
- <tt>(split-sequence:SPLIT-SEQUENCE #\Space "A stitch in time saves nine.") </tt>
</td>
</tr>

<tr>
<td>trivial-gray-streams 2006-09-16</td>
<td>Gray streams portability library</td>
<td>It is a dependency of many other libraries. Did not test directly.</td>
</tr>

<tr>
<td>uffi 1.6.1</td>
<td>Portable access to C libraries</td>
<td>clsql dependency. Did not test directly.</td>
</tr>

<tr>
<td>url-rewrite 0.1.1</td>
<td>Rewrite HTML attributes</td>
<td>
<b>Testing:</b><br/>
- load url-rewrite<br/>
- test using examples in documentation
</td>
</tr>

<tr>
<td>zip</td>
<td>Read and write ZIP files</td>
<td>
<b>Testing: </b><br/>
- create zip file with several entries, say c:\tmp\tmp.zip<br/>
- <tt>(zip:with-zipfile (zf #p"c:/tmp/tmp.zip") (zip:zipfile-entries zf))</tt>
 => hashtable with entries in zipfile (can check using inspector<br/>
- <tt>(zip:unzip #p"c:/tmp/tmp.zip" #p"c:/tmp/t/")</tt> => get contents of zip in c:/tmp/t.
</td>
</tr>

<tr>
<td>zpb-exif 1.0</td>
<td>Read EXIF data from digital images</td>
<td>
<b>Testing: </b><br/>
- load zpb-exif<br/>
- <tt>(in-package :zpb-exif) </tt><br/>
- put file g.jpg (preferably from a digital camera) to c:/tmp<br/>
- <tt>(defparameter *exif* (make-exif #p"c:/tmp/g.jpg"))</tt><br/>
- <tt>(exif-value "FNumber" *exif*)</tt> - and other commands from .html
</td>
</tr>

<tr>
<td>usocket 0.3.7</td>
<td>Universal socket library for Common Lisp</td>
<td><b>Testing: </b><br/>
- load usocket<br/>
- load rt<br/>
- <tt>(load "path-to-libs/usocket-0.3.7/test/package.lisp") </tt><br/> 
- <tt>(load "path-to-libs/usocket-0.3.7/test/test-usocket.lisp") </tt><br/> 
- <tt>(usocket-test:run-usocket-tests) </tt><br/>
- on win32 3 out of 15 tests fail, on Linux it hangs on 3'rd test
</td>
</tr>

</table>

<br/>
<br/>
<span class="url-link"><a href="index.html">Back to table of contents</a></span>


</body>
</html>
